﻿Imports VN.INS.BL.BC
Imports System.Data
Imports System.Web
Imports System.IO

Partial Class Devida_AvanceFisico
    Inherits System.Web.UI.Page

#Region "EVENTOS"

    'Load
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If (Not (Page.IsPostBack)) Then
            btn_guardar.Attributes.Add("onclick", "javascript:document.getElementById('" + btn_guardar.ClientID + "').disabled=true;" + Me.GetPostBackEventReference(btn_guardar))
            Dim NombreMonitoreadorAux As String = ""
            Dim pf As String = ""
            ViewState("VSFILAS") = ""
            ViewState("VSperiodd") = ""

            'Capturamos los parámetros
            ViewState("VSTPOA") = Request.QueryString("Param").ToString 'Código POA
            ViewState("VersionPoaVigente") = Request.QueryString("VersionPoaVigente").ToString
            ViewState("VersionPoaAvanceFis") = Request.QueryString("VersionPoaAvanceFis").ToString

            ViewState("NombreEjecutor") = Request.QueryString("NombreEjecutor").ToString
            ViewState("NombreEspecialista") = Request.QueryString("NombreEspecialista").ToString
            ViewState("NombreMonitoreador") = Request.QueryString("NombreMonitoreador").ToString

            ViewState("CodPeriodo") = Request.QueryString("CodPeriodo").ToString
            ViewState("NombrePeriodo") = Request.QueryString("NombrePeriodo").ToString

            Dim nombre As String = "<Font Color ='#000000'>ACTIVIDAD/PROYECTO: </Font> " + Request.QueryString("Nombre").ToString + "<br/> <Font Color ='#000000'>EJECUTOR: </Font>" + Request.QueryString("NombreEjecutor").ToString  'Nombre descripción del POA y Ejecutor

            Dim codigoPOA As String = ViewState("VSTPOA").ToString 'Nuevamente código POA


            lblCodigo.Text = codigoPOA 'Hacemos que la etiqueta tome y muestre el Nombre

            'Carga los meses que tienen plan de trabajo
            'ListaMes() Commented by Tigrito... pues ya no se necesita el combo
            'ddl_periodo_SelectedIndexChanged(sender, e)

            'Carga la grilla física del POA con plan de trabajo en cada periodo
            CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            lblNombrePeriodo.Text = "MES: " & ViewState("NombrePeriodo") 'ddl_periodo.SelectedItem.Text.ToString

            If ViewState("VSinstruccion") = "s" Then    'Si es nuevo y no tiene Poa_Actividad_fisico... es decir no el POA no cuenta con Prog. Metas Físicas 
                btn_guardar.Visible = False
                'Mostrar Mensaje
                alerta.Mostrar_Alerta("Error", "El Poa seleccionado no cuenta con Programación Física Registrada")
                'ddl_periodo.Visible = False
                Exit Sub    'Salir de Load
            End If

            If ViewState("VSFILAS") <> "NULO" Then 'Si es edicion y tiene datos
                Dim htxtMes As HiddenField = CType(gv_fisico.Rows(0).FindControl("hfMes"), HiddenField)    'Se carga el mes del periodo
                Dim htxtAño As HiddenField = CType(gv_fisico.Rows(0).FindControl("hfAño"), HiddenField)    'Se carga el año del periodo
                Label2.Text = nombre
                Label4.Text = nombre
                Label6.Text = nombre
                'Lblp.Text = " MES: " + MonthName(htxtMes.Value.ToString).ToUpper + " " + htxtAño.Value.ToString
                Lblp.Text = "MES: " & ViewState("NombrePeriodo")

                'By Tigrito(14/06/2013)
                'NombreMonitoreadorAux = "MONITOREADOR :  " + Session("Nombre")
                NombreMonitoreadorAux = "ESPECIALISTA TECNICO: " + ViewState("NombreMonitoreador")

                pf = "PPER : " + " " + Session("ABREVIATURA")

                lblNombMonitoreadorFormatoSolo.Text = NombreMonitoreadorAux
                Label11.Text = pf

                lblNombMonitoreadorFormatoDatos.Text = NombreMonitoreadorAux
                Label13.Text = pf
                Label15.Text = "MES: " + MonthName(htxtMes.Value.ToString).ToUpper + " " + htxtAño.Value.ToString

                'Capturamos el año y el mes
                ViewState("VSañop") = htxtAño.Value.ToString
                ViewState("VSmesp") = htxtMes.Value.ToString

                'Bloquea los controles segun ingreso de datos
                'By Tigrito (05/06/2013): El bloqueo cuando el ingreso está terminado se hace en el procedure bloquear()... review
                bloquear()

                txt.Text = ViewState("VSdate1")
                txt2.Text = ViewState("VSdate2")
                txt3.Text = ViewState("VSdate3")
                txt4.Text = ViewState("VSdate4")

                'By Tigrito: Estas etiquetas eran usadas antes de que se las añadiera dentro de la grilla gv_doc
                'lblf1.Text = ViewState("VSdate1")
                'lblf2.Text = ViewState("VSdate2")
                'lblf3.Text = ViewState("VSdate3")
                'lblf4.Text = ViewState("VSdate4")

                bloquear()

                ViewState("VSperfil") = Session("perfil").ToString

                If ViewState("VSperfil") = "AD" Or ViewState("VSperfil") = "EP" Or ViewState("VSperfil") = "RE" Then 'Sí no es monitoreador se oculta boton
                    btn_guardar.Visible = False
                End If

            Else        'Si es edicion y NO tiene datos
                Label2.Text = nombre
                Label4.Text = nombre
                Label6.Text = nombre

                lblNombMonitoreadorFormatoSolo.Text = NombreMonitoreadorAux 'Monitoreador, etiqueta para Formato (SIN DATOS)
                Label11.Text = pf

                lblNombMonitoreadorFormatoDatos.Text = NombreMonitoreadorAux 'Monitoreador, etiqueta para Formato (CON DATOS) 
                Label13.Text = pf
                alerta.Mostrar_Alerta("Error", "El POA no cuenta con plan de Trabajo para el presente Mes")
            End If

        End If
    End Sub

    'Guardar
    Protected Sub btn_guardar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_guardar.Click
        'Verificamos que se haya elegido un periodo
        'If ddl_periodo.SelectedValue = "all" Then
        '    alerta.Mostrar_Alerta("Aviso", "Debe elegir un Periodo")
        '    Exit Sub
        'End If
        'Verificamos el ingreso de la fecha 1
        'System.Threading.Thread.Sleep(4000)

        If txt.Text = "" Then
            alerta.Mostrar_Alerta("Aviso", "Debe ingresar la fecha de la visita 1")
            'By Tigrito: Commented 29/05/2013
            'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            bloquear()
            Exit Sub
        End If
        'Recorremos la grilla (Datos de la primera fecha)
        Dim k, l As Integer
        l = 0
        For k = 0 To gv_fisico.Rows.Count - 1
            Dim htxtM1 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox1"), TextBox)
            If htxtM1.Text <> "" Then
                l = l + 1
            Else
            End If
        Next
        'Si NO se ingreso ningun dato
        If l = 0 Then
            alerta.Mostrar_Alerta("Aviso", "Debe ingresar al menos un dato de la visita 1")

            'By Tigrito (01/07/2013): Commented
            'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            bloquear()
            Exit Sub
        End If
        'Recorremos la grilla (Datos de la segunda fecha)
        Dim x, y As Integer
        y = 0
        For x = 0 To gv_fisico.Rows.Count - 1
            Dim htxtM2 As TextBox = CType(gv_fisico.Rows(x).FindControl("TextBox2"), TextBox)
            If htxtM2.Text <> "" Then
                y = y + 1
            Else
            End If
        Next

        If txt2.Text = "" Then
        Else
            'Si se ingresaron fecha 2 y montos
            If txt2.Text <> "" Or y <> 0 Then
                'Si existe fecha 1
                If CStr(ViewState("VSdate1")) <> "" Then
                    If txt2.Text = "" Then   'Si NO se ingresó fecha 2
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar la fecha de la visita 2")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                    'Recorremos la grilla (Datos de la segunda fecha)
                    Dim a, b As Integer
                    b = 0
                    For a = 0 To gv_fisico.Rows.Count - 1
                        Dim htxtM2 As TextBox = CType(gv_fisico.Rows(a).FindControl("TextBox2"), TextBox)
                        If htxtM2.Text <> "" Then
                            b = b + 1
                        Else
                        End If
                    Next
                    'Si NO se ingreso ningun dato en fecha 2
                    If b = 0 Then
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar al menos un dato de la visita 2")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If

            End If

        End If

        'Recorremos la grilla (Datos de la tercera fecha)
        Dim r, s As Integer
        s = 0
        For r = 0 To gv_fisico.Rows.Count - 1
            Dim htxtM3 As TextBox = CType(gv_fisico.Rows(r).FindControl("TextBox3"), TextBox)
            If htxtM3.Text <> "" Then
                s = s + 1
            Else
            End If
        Next

        If txt3.Text = "" Then
        Else

            'Si se ingresaron fecha 3 y montos
            If txt3.Text <> "" Or s <> 0 Then
                If CStr(ViewState("VSdate2")) <> "" Then
                    'Si existe fecha 2
                    If txt3.Text = "" Then  'Si NO se ingresó fecha 3
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar la fecha de la visita 3")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                    'Recorremos la grilla (Datos de la tercera fecha)
                    Dim c, d As Integer
                    d = 0
                    For c = 0 To gv_fisico.Rows.Count - 1
                        Dim htxtM3 As TextBox = CType(gv_fisico.Rows(c).FindControl("TextBox3"), TextBox)
                        If htxtM3.Text <> "" Then
                            d = d + 1
                        Else
                        End If
                    Next
                    'Si NO se ingreso ningun dato en fecha 3
                    If d = 0 Then
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar al menos un dato de la visita 3")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If
            End If

        End If

        'Recorremos la grilla (Datos de la cuarta fecha)
        Dim t, u As Integer
        u = 0
        For t = 0 To gv_fisico.Rows.Count - 1
            Dim htxtM4 As TextBox = CType(gv_fisico.Rows(t).FindControl("TextBox4"), TextBox)
            If Convert.ToDouble(htxtM4.Text) Then
                u = u + 1
            Else
            End If
        Next

        If txt4.Text = "" Then
        Else

            'Si se ingresaron fecha 4 y montos
            If txt4.Text <> "" Or u <> 0 Then
                'Si  existe fecha 3
                If CStr(ViewState("VSdate3")) <> "" Then
                    'Si NO existe fecha 4
                    If txt4.Text = "" Then
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar la fecha de la visita 4")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                    'Recorremos la grilla (Datos de la cuarta fecha)
                    Dim h, f As Integer
                    f = 0
                    For h = 0 To gv_fisico.Rows.Count - 1
                        Dim htxtM4 As TextBox = CType(gv_fisico.Rows(h).FindControl("TextBox4"), TextBox)
                        If htxtM4.Text <> "" Then
                            f = f + 1
                        Else
                        End If
                    Next
                    'Si NO se ingreso ningun dato en fecha 4
                    If f = 0 Then
                        alerta.Mostrar_Alerta("Aviso", "Debe ingresar al menos un dato de la visita 4")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If
            End If

        End If

        'Comparamos las fechas
        Dim fec As Boolean = comparefecha()
        If fec = False Then     'Si no coinciden salimos sin guardar
            Exit Sub
        End If

        If ViewState("VSESTADO") = "I" Then     'Si es NUEVO
            'Si es terminado es estado 2 sino será 1
            If chkTerminado.Checked = True Then
                ViewState("VSEST") = "2"
            Else : ViewState("VSEST") = "1"
            End If

            'Recorremos la grilla
            Dim i As Integer
            For i = 0 To gv_fisico.Rows.Count - 1
                'Capturamos los valores de la fila

                Dim htxtM_Ejec As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBoxEjecM"), TextBox) ' By Tigrito 22/05/2013
                Dim htxtM1 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox1"), TextBox)
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox2"), TextBox)
                Dim htxtM3 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox3"), TextBox)
                Dim htxtM4 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox4"), TextBox)
                Dim intMetaAnual As Integer = CInt(gv_fisico.Rows(i).Cells(3).Text)
                Dim MES As String = gv_fisico.Rows(i).Cells(6).Text

                If htxtM_Ejec.Text = "" Then
                    htxtM_Ejec.Text = 0
                End If
                If htxtM1.Text = "" Then
                    htxtM1.Text = 0
                End If
                If htxtM2.Text = "" Then
                    htxtM2.Text = 0
                End If
                If htxtM3.Text = "" Then
                    htxtM3.Text = 0
                End If
                If htxtM4.Text = "" Then
                    htxtM4.Text = 0
                End If
                If MES = "&nbsp;" Or MES = "" Then
                    MES = "0"
                End If

                Dim mesb As String
                mesb = CleanInput(MES) 'Limpiamos de caracteres invalidos la cadena MES

                Dim Ejec_M As Double = Convert.ToDouble(htxtM_Ejec.Text)
                Dim MTM1 As Double = Convert.ToDouble(htxtM1.Text)
                Dim MTM2 As Double = Convert.ToDouble(htxtM2.Text)
                Dim MTM3 As Double = Convert.ToDouble(htxtM3.Text)
                Dim MTM4 As Double = Convert.ToDouble(htxtM4.Text)

                Dim ejeM As Double = Ejec_M
                Dim mes1 As Double = MTM1
                Dim mes2 As Double = MTM2
                Dim mes3 As Double = MTM3
                Dim mes4 As Double = MTM4
                Dim MESA As Integer = Convert.ToInt32(mesb)

                Dim Date_1_Aux As String = txt.Text
                Dim Date_2_Aux As String = txt2.Text
                Dim Date_3_Aux As String = txt3.Text
                Dim Date_4_Aux As String = txt4.Text

                'Validamos los montos
                If intMetaAnual < mes1 Or intMetaAnual < mes2 Or intMetaAnual < mes3 Or intMetaAnual < mes4 Then
                    alerta.Mostrar_Alerta("Aviso", "Alguna de las Cantidades de la visita esta superando a su respectiva Meta Anual </br> <font color ='FF0000'>Se han guardado los datos... corrija si lo considera necesario")

                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    bloquear()
                    'Exit Sub
                End If

                If Date_4_Aux <> "" Then
                    If mes4 < mes3 Then     'Si monto 4 es menor que 3 y diferente de cero
                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la  visita 3 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If

                If Date_3_Aux <> "" Then
                    If mes3 < mes2 Then     'Si monto 3 es menor que 2 y diferente de cero

                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la visita 2 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If

                If Date_2_Aux <> "" Then
                    If mes2 < mes1 Then     'Si monto 2 es menor que 1 y diferente de cero
                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la visita 1 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        bloquear()
                        Exit Sub
                    End If
                End If

                If mes1 < ejeM Then     'Si monto 1 es menor que el de Mayo y diferente de cero
                    alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al dato acumulado del mes ANTERIOR </br> <font color ='FF0000'>CORRIJA</font>")

                    'By Tigrito (01/07/2013): Commented
                    'carga_grilla(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    'Exit Sub
                End If

                If mes1 < MESA And mes1 <> "0.0" Then     'Si monto 1 es menor que meta acumulada y diferente de cero
                    alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al Acumulado </br> <font color ='FF0000'>CORRIJA</font>")

                    'By Tigrito (01/07/2013): Commented
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    bloquear()
                    Exit Sub
                End If
            Next
            Dim j As Integer
            Dim objgenj As GeneralBC

            'Recorremos la grilla
            For j = 0 To gv_fisico.Rows.Count - 1
                Dim strCodigo As Integer
                objgenj = New GeneralBC
                'Generamos el codigo del nuevo POA_FISICO_PERSONA
                strCodigo = objgenj.GenerarCodigoNumero("POA_FISICO_PERSONA", "ID_POA_FISICO_PERSONA")

                'Capturamos los valores de la fila i
                Dim htxtActfis As HiddenField = CType(gv_fisico.Rows(j).FindControl("hfActfis"), HiddenField)
                Dim htxtPlan As HiddenField = CType(gv_fisico.Rows(j).FindControl("hfPlan"), HiddenField)


                Dim htxtM_Ejec As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBoxEjecM"), TextBox)
                Dim htxtM1 As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBox1"), TextBox)
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBox2"), TextBox)
                Dim htxtM3 As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBox3"), TextBox)
                Dim htxtM4 As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBox4"), TextBox)
                Dim htxtM5 As TextBox = CType(gv_fisico.Rows(j).FindControl("TextBox5"), TextBox)
                Dim IDPOACT As Integer = CInt(htxtActfis.Value)
                Dim IDPLAN As Integer = CInt(htxtPlan.Value)

                Dim Ejec_M As Double = Convert.ToDouble(htxtM_Ejec.Text)
                Dim MTM1 As Double = Convert.ToDouble(htxtM1.Text)
                Dim MTM2 As Double = Convert.ToDouble(htxtM2.Text)
                Dim MTM3 As Double = Convert.ToDouble(htxtM3.Text)
                Dim MTM4 As Double = Convert.ToDouble(htxtM4.Text)

                Dim OB As String = htxtM5.Text
                Dim F1 As String = txt.Text
                Dim F2 As String = txt2.Text
                Dim F3 As String = txt3.Text
                Dim F4 As String = txt4.Text

                Dim Ejec_M_Aux As String = Ejec_M.ToString
                Dim MTMa As String = MTM1.ToString
                Dim MTMb As String = MTM2.ToString
                Dim MTMc As String = MTM3.ToString
                Dim MTMd As String = MTM4.ToString

                'Insertamos los datos de la fila i
                insertar_fisico_per(IDPOACT, Ejec_M_Aux.Replace(".", ","), MTMa.Replace(".", ","), MTMb.Replace(".", ","), MTMc.Replace(".", ","), MTMd.Replace(".", ","), strCodigo, IDPLAN, OB, F1, F2, F3, F4, ViewState("VSEST"), ViewState("VersionPoaVigente"))
                'insertar_fisico_per(IDPOACT, Ejec_M_Aux.Replace(",", "."), MTMa.Replace(",", "."), MTMb.Replace(",", "."), MTMc.Replace(",", "."), MTMd.Replace(",", "."), strCodigo, IDPLAN, OB, F1, F2, F3, F4, ViewState("VSEST"))

                'Cambiamos el estado a EDICION
                ViewState("VSESTADO") = "E"

                bloquear()
            Next

            'By Tigrito (16/08/2013): Luego de la inserción... ahora VersionPoaAvanceFis toma el valor de VersionPoaVigente
            ViewState("VersionPoaAvanceFis") = ViewState("VersionPoaVigente")

            CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            bloquear()
            If ViewState("VSEST") = "2" Then
                btn_guardar.Visible = False
            End If
            'bloquear()
            alerta.Mostrar_Alerta("Aviso", "Los Datos se guardaron exitosamente")

        Else        'Sí es EDICION
            If chkTerminado.Checked = True Then 'Sí checkbox esta marcado es estado 2 sino 1
                ViewState("VSEST") = "2"
            Else : ViewState("VSEST") = "1"
            End If

            Dim i As Integer
            'Capturamos los valores de la fila i
            For i = 0 To gv_fisico.Rows.Count - 1
                Dim htxtM_Ejec As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBoxEjecM"), TextBox)
                Dim htxtM1 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox1"), TextBox)
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox2"), TextBox)
                Dim htxtM3 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox3"), TextBox)
                Dim htxtM4 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox4"), TextBox)
                Dim intMetaAnual As Integer = CInt(gv_fisico.Rows(i).Cells(3).Text)
                Dim MES As String = gv_fisico.Rows(i).Cells(6).Text

                If htxtM_Ejec.Text = "" Then
                    htxtM_Ejec.Text = 0
                End If

                If htxtM1.Text = "" Then
                    htxtM1.Text = 0
                End If

                If htxtM2.Text = "" Then
                    htxtM2.Text = 0
                End If

                If htxtM3.Text = "" Then
                    htxtM3.Text = 0
                End If

                If htxtM4.Text = "" Then
                    htxtM4.Text = 0
                End If

                If MES = "&nbsp;" Or MES = "" Then
                    MES = "0"
                End If
                'Limpiamos valores invalidos de cadena MES  
                Dim mesb As String
                mesb = CleanInput(MES)

                Dim Ejec_M As Double = Convert.ToDouble(htxtM_Ejec.Text)
                Dim strM1 As Double = Convert.ToDouble(htxtM1.Text)
                Dim strM2 As Double = Convert.ToDouble(htxtM2.Text)
                Dim strM3 As Double = Convert.ToDouble(htxtM3.Text)
                Dim strM4 As Double = Convert.ToDouble(htxtM4.Text)

                Dim Ejec_Mayo_Aux As Double = Ejec_M
                Dim mes1 As Double = strM1
                Dim mes2 As Double = strM2
                Dim mes3 As Double = strM3
                Dim mes4 As Double = strM4
                Dim MESA As Integer = Convert.ToInt32(mesb)

                Dim Fecha_1_Aux As String = txt.Text
                Dim Fecha_2_Aux As String = txt2.Text
                Dim Fecha_3_Aux As String = txt3.Text
                Dim Fecha_4_Aux As String = txt4.Text

                'Validamos los montos
                If intMetaAnual < mes1 Or intMetaAnual < mes2 Or intMetaAnual < mes3 Or intMetaAnual < mes4 Then
                    alerta.Mostrar_Alerta("Aviso", "Alguna de las Cantidades de la visita esta superando a su respectiva Meta Anual </br> <font color ='FF0000'>Se han guardado los datos... corrija si lo considera necesario")

                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    bloquear()
                    'Exit Sub
                End If

                If Fecha_4_Aux <> "" Then
                    If mes4 < mes3 Then     'Si monto 4 es menor que 3 y diferente de cero
                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la  visita 3 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        Exit Sub
                    End If
                End If

                If Fecha_3_Aux <> "" Then
                    If mes3 < mes2 Then     'Si monto 3 es menor que 2 y diferente de cero
                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la visita 2 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        Exit Sub
                    End If
                End If

                If Fecha_2_Aux <> "" Then
                    If mes2 < mes1 Then     'Si monto 2 es menor que 1 y diferente de cero

                        alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al de la visita 1 </br> <font color ='FF0000'>CORRIJA</font>")

                        'By Tigrito (01/07/2013): Commented
                        'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                        Exit Sub
                    End If
                End If

                If mes1 < Ejec_Mayo_Aux Then     'Si monto 2 es menor que 1 y diferente de cero
                    alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al dato acumulado del mes ANTERIOR </br> <font color ='FF0000'>CORRIJA</font>")

                    'By Tigrito (01/07/2013): Commented
                    'carga_grilla(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    'Exit Sub
                End If

                If mes1 < MESA And mes1 <> "0.0" Then     'Si monto 1 es menor que meta acumulada y diferente de cero
                    alerta.Mostrar_Alerta("Aviso", "Algunas de las cantidades ingresadas son Menores al Acumulado </br> <font color ='FF0000'>CORRIJA</font>")

                    'By Tigrito (01/07/2013): Commented
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    Exit Sub
                End If
            Next
            'Recorremos la grilla
            For i = 0 To gv_fisico.Rows.Count - 1
                'Capturamos los valores de la fila i
                Dim htxtCodigo As HiddenField = CType(gv_fisico.Rows(i).FindControl("hfCodigo"), HiddenField)

                Dim htxtM_Ejec As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBoxEjecM"), TextBox)
                Dim htxtM1 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox1"), TextBox)
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox2"), TextBox)
                Dim htxtM3 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox3"), TextBox)
                Dim htxtM4 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox4"), TextBox)
                Dim htxtM5 As TextBox = CType(gv_fisico.Rows(i).FindControl("TextBox5"), TextBox)

                Dim MES As String = gv_fisico.Rows(i).Cells(4).Text

                If htxtM_Ejec.Text = "" Then
                    htxtM_Ejec.Text = 0
                End If
                If htxtM1.Text = "" Then
                    htxtM1.Text = 0
                End If
                If htxtM2.Text = "" Then
                    htxtM2.Text = 0
                End If
                If htxtM3.Text = "" Then
                    htxtM3.Text = 0
                End If
                If htxtM4.Text = "" Then
                    htxtM4.Text = 0
                End If
                If htxtM5.Text = "" Then
                    htxtM5.Text = ""
                End If
                If MES = "&nbsp;" Or MES = "" Then
                    MES = "0"
                End If
                'Limpiamos valores invalidos de cadena MES  
                Dim mesb As String
                mesb = CleanInput(MES)

                Dim strCodigo As String = htxtCodigo.Value.ToString

                Dim strEjec_M As String = htxtM_Ejec.Text.ToString

                Dim strM1 As String = htxtM1.Text.ToString
                Dim strM2 As String = htxtM2.Text.ToString
                Dim strM3 As String = htxtM3.Text.ToString
                Dim strM4 As String = htxtM4.Text.ToString
                Dim OB As String = htxtM5.Text.ToString
                Dim F1 As String = txt.Text
                Dim F2 As String = txt2.Text
                Dim F3 As String = txt3.Text
                Dim F4 As String = txt4.Text

                'Editamos los datos de la fila i
                edicion_grilla(strEjec_M.Replace(".", ","), strM1.Replace(".", ","), strM2.Replace(".", ","), strM3.Replace(".", ","), strM4.Replace(".", ","), strCodigo, OB, F1, F2, F3, F4, ViewState("VSEST"), ViewState("VersionPoaVigente"))
                'edicion_grilla(strEjec_M.Replace(",", "."), strM1.Replace(",", "."), strM2.Replace(",", "."), strM3.Replace(",", "."), strM4.Replace(",", "."), strCodigo, OB, F1, F2, F3, F4, ViewState("VSEST"))
                'edicion_grilla(2.5, 3.1, 1, 1, 1, strCodigo, OB, F1, F2, F3, F4, ViewState("VSEST"))

                alerta.Mostrar_Alerta("Aviso", "Los Datos se Guardaron exitosamente")
            Next
            'Cargamos la grilla 
            CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            bloquear()
            'Si es terminado seleccionamos checkbox y ocultamos boton Guardar
            If ViewState("VSEST") = "2" Then
                btn_guardar.Visible = False
                chkTerminado.Checked = True
            End If
            bloquear()
        End If
        bloquear()
    End Sub

    'Salir
    Protected Sub ibSalir_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ibSalir.Click
        Response.Redirect("ListaAvanceFisiFinMensual.aspx")
    End Sub

    'Llenado de Grilla
    Protected Sub gv_fisico_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles gv_fisico.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then

            Dim Aux1 As Decimal = 0
            Dim Aux2 As Decimal = 0

            If e.Row.Cells(11).Text.ToString = "" Or e.Row.Cells(11).Text.ToString = "&nbsp;" Or IsDBNull(e.Row.Cells(11).Text.ToString) Then
                Aux1 = 0
            Else
                Aux1 = Convert.ToDecimal(e.Row.Cells(11).Text.ToString)
            End If

            If e.Row.Cells(13).Text.ToString = "" Or e.Row.Cells(13).Text.ToString = "&nbsp;" Or IsDBNull(e.Row.Cells(13).Text.ToString) Then
                Aux2 = 0
            Else
                Aux2 = Convert.ToDecimal(e.Row.Cells(13).Text.ToString)
            End If

            '----------------
            If Aux1 < 0 Then
                e.Row.Cells(11).ForeColor = Drawing.Color.Red
                e.Row.Cells(12).ForeColor = Drawing.Color.Red
            End If
            If Aux2 < 0 Then
                e.Row.Cells(13).ForeColor = Drawing.Color.Red
                e.Row.Cells(14).ForeColor = Drawing.Color.Red
            End If
            Dim htxtM_Ejec As TextBox = CType(e.Row.FindControl("TextBoxEjecM"), TextBox)
            Dim htxtM1 As TextBox = CType(e.Row.FindControl("TextBox1"), TextBox)
            Dim htxtM2 As TextBox = CType(e.Row.FindControl("TextBox2"), TextBox)
            Dim htxtM3 As TextBox = CType(e.Row.FindControl("TextBox3"), TextBox)
            Dim htxtM4 As TextBox = CType(e.Row.FindControl("TextBox4"), TextBox)
            htxtM_Ejec.Text = Format(CDec(htxtM_Ejec.Text), "#,##0.00")
            htxtM1.Text = Format(CDec(htxtM1.Text), "#,##0.00")
            htxtM2.Text = Format(CDec(htxtM2.Text), "#,##0.00")
            htxtM3.Text = Format(CDec(htxtM3.Text), "#,##0.00")
            htxtM4.Text = Format(CDec(htxtM4.Text), "#,##0.00")
        End If
    End Sub

#End Region

#Region "PROCEDIMIENTOS"

    Public Sub CargarGrillaMon(ByVal POA As String, ByVal periodo As String)
        ViewState("VSNUMEROG") = verifica_accion(POA, periodo) ' Verifica si existe datos en Poa_Financiero_Persona
        If ViewState("VSperiodd") = "ver" Then
            ViewState("VSESTADO") = "E"
        Else
            If ViewState("VSNUMEROG") = 0 Then
                ViewState("VSESTADO") = "I" 'Insertar
            Else
                ViewState("VSESTADO") = "E" 'Editar
            End If
        End If
        ViewState("VSinstruccion") = "A"
        ViewState("VSdate1") = ""
        ViewState("VSdate2") = ""
        ViewState("VSdate3") = ""
        ViewState("VSdate4") = ""

        If ViewState("VSESTADO") = "I" Then 'Insertar
            Dim objFisicoBC As FisicoBC
            Dim objData As DataTable
            objFisicoBC = New FisicoBC
            objData = objFisicoBC.editar_fisico(POA, periodo, ViewState("VersionPoaVigente")) 'Obtiene el Poa_Actividad_Fisica para el POA 
            If objData.Rows.Count = 0 Then
                ViewState("VSinstruccion") = "s"
                Exit Sub
            End If
            ViewState("Datos") = objData
            'cargamos la grilla
            gv_fisico.DataSource = objData
            gv_fisico.DataBind()
            gv_formato.DataSource = objData
            gv_formato.DataBind()
            'Capturamos las fechas de visitas y el estado
            If IsDBNull(objData.Rows(0).Item("FECHA_VISITA1")) Then
                ViewState("VSdate1") = ""
            Else
                ViewState("VSdate1") = objData.Rows(0).Item("FECHA_VISITA1")
            End If
            If IsDBNull(objData.Rows(0).Item("FECHA_VISITA2")) Then
                ViewState("VSdate2") = ""
            Else
                ViewState("VSdate2") = objData.Rows(0).Item("FECHA_VISITA2")
            End If
            If IsDBNull(objData.Rows(0).Item("FECHA_VISITA3")) Then

                ViewState("VSdate3") = ""
            Else
                ViewState("VSdate3") = objData.Rows(0).Item("FECHA_VISITA3")
            End If
            If IsDBNull(objData.Rows(0).Item("FECHA_VISITA4")) Then

                ViewState("VSdate4") = ""
            Else
                ViewState("VSdate4") = objData.Rows(0).Item("FECHA_VISITA4")
            End If
            If IsDBNull(objData.Rows(0).Item("ESTADO")) Then
                ViewState("VSEST") = "1"
            Else
                ViewState("VSEST") = objData.Rows(0).Item("ESTADO")
            End If
            'Llenamos las fechas
            txt.Text = ViewState("VSdate1")
            txt2.Text = ViewState("VSdate2")
            txt3.Text = ViewState("VSdate3")
            txt4.Text = ViewState("VSdate4")
            bloquear()
        Else
            ViewState("VSESTADO") = "E" 'Editar
            Dim objFisicoBC As FisicoBC
            Dim objData As DataTable
            objFisicoBC = New FisicoBC

            'Cargamos las actividades fisicas de edicion y lo cargamos con la versión de POA con la que se creo
            objData = objFisicoBC.editar_fisico(POA, periodo, ViewState("VersionPoaAvanceFis"))
            ViewState("Datos") = objData
            Dim E As Integer = objData.Rows.Count 'Capturamos el numero de filas
            If E = 0 Then ' si no hay datos 
                ViewState("VSFILAS") = "NULO"
                gv_fisico.DataSource = objData
                gv_fisico.DataBind()
                gv_formato.DataSource = objData
                gv_formato.DataBind()
                gv_doc.DataSource = objData
                gv_doc.DataBind()

                alerta.Mostrar_Alerta("Error", "El POA no cuenta con plan de Trabajo para el presente Mes")
                txt.Text = ""
                txt2.Text = ""
                txt3.Text = ""
                txt4.Text = ""
            Else ' si hay datos
                ViewState("VSFILAS") = "NULO1"
                'capturamos las fechas y el estado
                If IsDBNull(objData.Rows(0).Item("FECHA_VISITA1")) Then
                    ViewState("VSdate1") = ""
                Else
                    ViewState("VSdate1") = objData.Rows(0).Item("FECHA_VISITA1")
                End If
                If IsDBNull(objData.Rows(0).Item("FECHA_VISITA2")) Then
                    ViewState("VSdate2") = ""
                Else
                    ViewState("VSdate2") = objData.Rows(0).Item("FECHA_VISITA2")
                End If
                If IsDBNull(objData.Rows(0).Item("FECHA_VISITA3")) Then
                    ViewState("VSdate3") = ""
                Else
                    ViewState("VSdate3") = objData.Rows(0).Item("FECHA_VISITA3")
                End If
                If IsDBNull(objData.Rows(0).Item("FECHA_VISITA4")) Then
                    ViewState("VSdate4") = ""
                Else
                    ViewState("VSdate4") = objData.Rows(0).Item("FECHA_VISITA4")
                End If
                'Llenamos las fechas
                txt.Text = ViewState("VSdate1")
                txt2.Text = ViewState("VSdate2")
                txt3.Text = ViewState("VSdate3")
                txt4.Text = ViewState("VSdate4")
                'llenamos la grilla
                gv_fisico.DataSource = objData
                gv_fisico.DataBind()
                gv_formato.DataSource = objData
                gv_formato.DataBind()
                gv_doc.DataSource = objData
                gv_doc.DataBind()

                gv_doc.HeaderRow.Cells(6).Text = "Visita 1 <br> <font size='1'>" & ViewState("VSdate1") & "</font>"
                gv_doc.HeaderRow.Cells(7).Text = "Visita 2 <br> <font size='1'>" & ViewState("VSdate2") & "</font>"
                gv_doc.HeaderRow.Cells(8).Text = "Visita 3 <br> <font size='1'>" & ViewState("VSdate3") & "</font>"
                gv_doc.HeaderRow.Cells(9).Text = "Visita 4 <br> <font size='1'>" & ViewState("VSdate4") & "</font>"

                ViewState("VSEST") = objData.Rows(0).Item("ESTADO").ToString

                'By Tigrito (05/06/2013): Sí el llenado del Avance Físico está terminado
                If ViewState("VSEST") = "2" Then
                    chkTerminado.Checked = True
                    chkTerminado.Enabled = False
                    btn_guardar.Visible = False
                End If
            End If
        End If
        bloquear()
    End Sub

    'Inserta poa_fisico_persona
    Protected Sub insertar_fisico_per(ByVal IDPOACT As String, ByVal Ejec_M As String, ByVal MTM1 As String,
                                      ByVal MTM2 As String, ByVal MTM3 As String, ByVal MTM4 As String,
                                 ByVal IDFPER As String, ByVal IDPLAN As String, ByVal OB As String, ByVal F1 As String, ByVal F2 As String, ByVal F3 As String, ByVal F4 As String, ByVal E As String, ByVal strVersionPoaVigente As String)
        Dim objFISICOBC As FisicoBC
        objFISICOBC = New FisicoBC
        objFISICOBC.insertar_fisico_per(IDPOACT, Ejec_M, MTM1, MTM2, MTM3, MTM4, IDFPER, IDPLAN, OB, F1, F2, F3, F4, E, strVersionPoaVigente)
    End Sub

    'Editar poa_fisico_persona
    Protected Sub edicion_grilla(ByVal strEjec_M As String, ByVal strM1 As String, ByVal strM2 As String, ByVal strM3 As String, ByVal strM4 As String, ByVal strCodigo As String, ByVal OB As String, ByVal F1 As String, ByVal F2 As String, ByVal F3 As String, ByVal F4 As String, ByVal E As String, ByVal strVersionPoaVigente As String)
        Dim objFISICOBC As FisicoBC
        objFISICOBC = New FisicoBC

        'lblBorrar.Text = strM1    'Etiqueta auxiliar para mostrar el valor
        objFISICOBC.edicion_grilla(strEjec_M, strM1, strM2, strM3, strM4, strCodigo, OB, F1, F2, F3, F4, E, strVersionPoaVigente)
        'objFISICOBC.edicion_grilla(2.6, 2.7, 2.8, 2.9, 3.1, strCodigo, OB, F1, F2, F3, F4, E)
        'objFISICOBC.edicion_grilla(strEjec_M.Replace(",", "."), strM1.Replace(",", "."), strM2, strM3, strM4, strCodigo, OB, F1, F2, F3, F4, E)
        'objFISICOBC.edicion_grilla(2.5, 3.15, 2, 2, 2, strCodigo, OB, F1, F2, F3, F4, E)
    End Sub

    Public Sub bloquear()
        If ViewState("VSdate1").ToString = "" Then 'Si no hay datos de fecha 1
            Dim k As Integer
            For k = 0 To gv_fisico.Rows.Count - 1  'Recorremos la grilla
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox2"), TextBox)
                htxtM2.Enabled = False  'Deshabilitamos textbox de meta 2
            Next
            'Deshabilitamos Fechas 2, 3 y 4
            txt2.Enabled = False
            ImgCalIni2.Enabled = False
            txt3.Enabled = False
            ImgCalIni3.Enabled = False
            txt4.Enabled = False
            ImgCalIni4.Enabled = False
        Else
            'Habilitamos fecha 2
            txt2.Enabled = True
            ImgCalIni2.Enabled = True
            For k = 0 To gv_fisico.Rows.Count - 1
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox2"), TextBox)
                htxtM2.Enabled = True
            Next
        End If
        If ViewState("VSdate2").ToString = "" Then  'Si no ha y datos en fecha 2
            Dim l As Integer
            For l = 0 To gv_fisico.Rows.Count - 1  'Recorremos la grilla
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(l).FindControl("TextBox3"), TextBox)
                htxtM2.Enabled = False  'Deshabilitamos textbox de meta 3
            Next
            'Deshabilitamos Fechas 3 y 4
            txt3.Enabled = False
            ImgCalIni3.Enabled = False
            txt4.Enabled = False
            ImgCalIni4.Enabled = False
        Else
            'Habilitamos fecha 3
            txt3.Enabled = True
            ImgCalIni3.Enabled = True
            For l = 0 To gv_fisico.Rows.Count - 1
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(l).FindControl("TextBox3"), TextBox)
                htxtM2.Enabled = True
            Next
        End If
        If ViewState("VSdate3").ToString = "" Then  'Si no ha y datos en fecha 3
            Dim m As Integer
            For m = 0 To gv_fisico.Rows.Count - 1  'Recorremos la grilla
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(m).FindControl("TextBox4"), TextBox)
                htxtM2.Enabled = False  'Deshabilitamos textbox de meta 4
            Next
            'Deshabilitamos Fechas 4
            txt4.Enabled = False
            ImgCalIni4.Enabled = False
        Else
            'Habilitamos fecha 4
            txt4.Enabled = True
            ImgCalIni4.Enabled = True
            For m = 0 To gv_fisico.Rows.Count - 1
                Dim htxtM2 As TextBox = CType(gv_fisico.Rows(m).FindControl("TextBox4"), TextBox)
                htxtM2.Enabled = True
            Next
        End If

        'By Tigrito (06/06/2013): Desabilita los campos editables cuando esta terminado el edicion/ingreso
        If chkTerminado.Checked = True Then

            ImgCalIni1.Enabled = False
            ImgCalIni2.Enabled = False
            ImgCalIni3.Enabled = False
            ImgCalIni4.Enabled = False

            txt.Enabled = False
            txt2.Enabled = False
            txt3.Enabled = False
            txt4.Enabled = False
            gv_fisico.Enabled = False
        End If

    End Sub

    'By Tigrito (05/06/2013)
    'Prodecimiento que bloquea todos los textboxes de la grilla indicada
    Public Sub Bloquear_Textboxes_Grilla_Fisica()
        Dim k As Integer
        For k = 0 To gv_fisico.Rows.Count - 1  'Recorremos la grilla

            Dim Aux1 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBoxEjecM"), TextBox) 'Ejecutado acumulado a Mayo
            Dim Aux2 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox1"), TextBox) 'Ejecutado acumulado visita 1
            Dim Aux3 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox2"), TextBox)
            Dim Aux4 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox3"), TextBox)
            Dim Aux5 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox4"), TextBox)
            Dim Aux6 As TextBox = CType(gv_fisico.Rows(k).FindControl("TextBox5"), TextBox) 'Observacion general de cada fila

            Aux1.Enabled = False  'Deshabilitamos el textbox indicado
            Aux2.Enabled = False  'Deshabilitamos el textbox indicado
            Aux3.Enabled = False  'Deshabilitamos el textbox indicado
            Aux4.Enabled = False  'Deshabilitamos el textbox indicado
            Aux5.Enabled = False  'Deshabilitamos el textbox indicado
            Aux6.Enabled = False  'Deshabilitamos el textbox indicado
        Next
    End Sub

    Protected Sub imgbtn_Click(ByVal sender As Object, ByVal e As EventArgs)
        txtCod.Text = String.Empty
        txtObservacion.Text = String.Empty
        'Dim btndetails As ImageButton = TryCast(sender, ImageButton)
        Dim btndetails As Button = TryCast(sender, Button)
        Dim gvrow As GridViewRow = DirectCast(btndetails.NamingContainer, GridViewRow)
        hdCod.Value = gv_fisico.DataKeys(gvrow.RowIndex).Value.ToString()
        ViewState("NroFila") = Convert.ToInt16(gvrow.RowIndex)
        Dim dv As DataView = New DataView(ViewState("Datos"), "ID_POA_ACTIVIDAD_FISICA='" + hdCod.Value + "'", "ID_POA_ACTIVIDAD_FISICA", DataViewRowState.CurrentRows)
        Dim dt As DataTable
        dt = New DataTable
        dt = dv.ToTable()
        txtCod.Text = dt.Rows(0).Item("CODIGO").ToString
        txtUnidad.InnerHtml = dt.Rows(0).Item("DESCRIPCION").ToString
        txtNombre.InnerHtml = dt.Rows(0).Item("TAREA_ACTIVIDAD").ToString
        txtMetaAcum.Style.Add("TEXT-ALIGN", "right")
        txtMetaAcum.Text = Format(CDec(dt.Rows(0).Item("ACUMULADO").ToString), "#,##0.00")
        txtMetaAnual.Style.Add("TEXT-ALIGN", "right")
        txtMetaAnual.Text = Format(CDec(dt.Rows(0).Item("META_ANUAL").ToString), "#,##0.00")
        txtMetaMes.Style.Add("TEXT-ALIGN", "right")
        txtMetaMes.Text = Format(CDec(dt.Rows(0).Item("MES1").ToString), "#,##0.00")
        txtObservacion.Text = dt.Rows(0).Item("OBSERVACIONES").ToString
        txtEjecMes.Style.Add("TEXT-ALIGN", "right")
        txtEjecMes.Text = Format(Obt_Ultimo_Ejecutado_Acum(dt.Rows(0).Item("FECHA_VISITA1").ToString, dt.Rows(0).Item("FECHA_VISITA2").ToString, dt.Rows(0).Item("FECHA_VISITA3").ToString, dt.Rows(0).Item("FECHA_VISITA4").ToString, dt.Rows(0).Item("META_MENSUAL1"), dt.Rows(0).Item("META_MENSUAL2"), dt.Rows(0).Item("META_MENSUAL3"), dt.Rows(0).Item("META_MENSUAL4")) - dt.Rows(0).Item("EJEC_EN_EL_MES"), "#,##0.00")
        txtEjecMesPorc.Style.Add("TEXT-ALIGN", "right")
        txtEjecMesPorc.Text = String.Format("{0:#,###0.0%}", DivPorCero(Obt_Ultimo_Ejecutado_Acum(dt.Rows(0).Item("FECHA_VISITA1").ToString, dt.Rows(0).Item("FECHA_VISITA2").ToString, dt.Rows(0).Item("FECHA_VISITA3").ToString, dt.Rows(0).Item("FECHA_VISITA4").ToString, dt.Rows(0).Item("META_MENSUAL1"), dt.Rows(0).Item("META_MENSUAL2"), dt.Rows(0).Item("META_MENSUAL3"), dt.Rows(0).Item("META_MENSUAL4")) - dt.Rows(0).Item("EJEC_EN_EL_MES"), dt.Rows(0).Item("MES1")))
        txtMesAcum.Style.Add("TEXT-ALIGN", "right")
        txtMesAcum.Text = String.Format("{0:#,###0.00}", Obt_Ultimo_Ejecutado_Acum(dt.Rows(0).Item("FECHA_VISITA1").ToString, dt.Rows(0).Item("FECHA_VISITA2").ToString, dt.Rows(0).Item("FECHA_VISITA3").ToString, dt.Rows(0).Item("FECHA_VISITA4").ToString, dt.Rows(0).Item("META_MENSUAL1"), dt.Rows(0).Item("META_MENSUAL2"), dt.Rows(0).Item("META_MENSUAL3"), dt.Rows(0).Item("META_MENSUAL4")))
        txtMesAcumPorc.Style.Add("TEXT-ALIGN", "right")
        txtMesAcumPorc.Text = String.Format("{0:#,###0.0%}", DivPorCero(Obt_Ultimo_Ejecutado_Acum(dt.Rows(0).Item("FECHA_VISITA1").ToString, dt.Rows(0).Item("FECHA_VISITA2").ToString, dt.Rows(0).Item("FECHA_VISITA3").ToString, dt.Rows(0).Item("FECHA_VISITA4").ToString, dt.Rows(0).Item("META_MENSUAL1"), dt.Rows(0).Item("META_MENSUAL2"), dt.Rows(0).Item("META_MENSUAL3"), dt.Rows(0).Item("META_MENSUAL4")), dt.Rows(0).Item("ACUMULADO")))
        If CDec(txtEjecMes.Text) < 0 Then
            txtEjecMes.ForeColor = Drawing.Color.Red
            txtEjecMesPorc.ForeColor = Drawing.Color.Red
        Else
            txtEjecMes.ForeColor = Drawing.Color.Black
            txtEjecMesPorc.ForeColor = Drawing.Color.Black
        End If
        If CDec(txtMesAcum.Text) < 0 Then
            txtMesAcum.ForeColor = Drawing.Color.Red
            txtMesAcumPorc.ForeColor = Drawing.Color.Red
        Else
            txtMesAcum.ForeColor = Drawing.Color.Black
            txtMesAcumPorc.ForeColor = Drawing.Color.Black
        End If
        If txtObservacion.Text.Length > 20 Then
            txtObservacion.Height = txtObservacion.Text.Length / 4
        Else
            txtObservacion.Height = 25
        End If
        Me.ModalPopupExtender1.Show()
    End Sub

    Protected Sub btnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim datos As DataTable
        datos = New DataTable
        datos = ViewState("Datos")
        ViewState("Obs_inicial") = datos.Rows(ViewState("NroFila")).Item("OBSERVACIONES")
        'Crear código
        Dim strCero As String = ""
        strCero = txtObservacion.Text.Substring(0, 1)
        If strCero = "," Or txtObservacion.Text.Length = 0 Then
        Else
            Dim indice As Integer = 0
            Dim longInicial As Integer = 0
            Dim longFinal As Integer = txtObservacion.Text.Length
            If ViewState("Obs_inicial").ToString.Trim <> "" And ViewState("Obs_inicial").ToString.Trim <> Quitar_Coma_Inicial(txtObservacion.Text) Then
                indice = txtObservacion.Text.IndexOf(ViewState("Obs_inicial"))
                longInicial = ViewState("Obs_inicial").ToString.Length
                If txtObservacion.Text.IndexOf(ViewState("Obs_inicial")) > -1 Then
                    txtObservacion.Text = txtObservacion.Text.Substring(longInicial + 1, longFinal - longInicial - 1)
                End If
            End If
        End If
        Dim strCodigo, strObs As String
        strCodigo = hdCod.Value
        strObs = Quitar_Coma_Inicial(txtObservacion.Text)
        Dim rowfs As DataRow = datos.Rows(ViewState("NroFila")) 'hdIndice.Value)        
        rowfs("OBSERVACIONES") = strObs
        txtObservacion.Text = ""
        'datos.Rows.Add(rowfs)
        Me.gv_fisico.DataSource = datos
        Me.gv_fisico.DataBind()
    End Sub

    Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As EventArgs)
        txtObservacion.Text = ""
        ModalPopupExtender1.Hide()
    End Sub

#End Region

#Region "FUNCIONES"

    Function CleanInput(ByVal strIn As String) As String
        Return Regex.Replace(strIn, "[^\w\.@-]", "")
    End Function

    'Obtenemos el numero de registros
    Public Function verifica_accion(ByVal srtPoa As String, ByVal strPeriodo As String) As Integer
        Dim objFisicoBC As FisicoBC
        Dim NUMERO As Integer
        Try
            objFisicoBC = New FisicoBC
            NUMERO = objFisicoBC.verifica_accion(srtPoa, strPeriodo)
            Return NUMERO
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Private Function comparefecha() As Boolean
        'Comparamos Fecha 1 (Dia, Mes  y año)
        Dim fa As Date = Convert.ToDateTime(txt.Text)
        Dim mesp1 As Integer = (CType(ViewState("VSmesp"), Integer))
        Dim añop1 As Integer = (CType(ViewState("VSañop"), Integer))
        Dim boofecha As Boolean
        Dim mest1c As Integer = Month(fa)
        Dim añot1c As Integer = Year(fa)
        Dim diat1c As Integer = Day(fa)
        Dim fsystem1 As Integer = Now.Day

        If ViewState("CodPeriodo") = "201401" Then
            añop1 = "2014"
        End If


        boofecha = True
        If mest1c <> mesp1 Then     'Si el mes de edicion es distinto al mes de calendario
            alerta.Mostrar_Alerta("Aviso", "La fecha de la Visita 1 no corresponde al mes de la Ficha de Monitoreo que es <b>" & ViewState("NombrePeriodo") & "</b>")

            'By Tigrito: Commented 29/05/2013
            'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

            bloquear()
            boofecha = False
        ElseIf añot1c <> añop1 Then 'Si el año de edicion es distinto al año de calendario 
            alerta.Mostrar_Alerta("Aviso", "El año de la visita 1 no corresponde al Periodo")

            'By Tigrito: Commented 29/05/2013
            'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

            bloquear()
            boofecha = False

            'Comentado por Tigrito
            'ElseIf diat1c > fsystem1 Then 'Si el dia actual es distinto al dia de calendario
            '    alerta.Mostrar_Alerta("Aviso", "El Día Registrado  es Superior al Actual")
            '    CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
            '    bloquear()
            '    boofecha = False
        End If

        If boofecha = True Then     'Si la fecha coincide 
            'Si la fecha 2 NO está vacia
            If txt2.Text <> "" Then
                'Comparamos Fecha 2 (Dia, Mes  y año)
                Dim fb As Date = Convert.ToDateTime(txt2.Text)
                Dim mest2c As Integer = Month(fb)
                Dim añot2c As Integer = Year(fb)
                Dim diat2c As Integer = Day(fb)
                Dim fsystem2 As Integer = Now.Day
                If mest2c <> mesp1 Then
                    alerta.Mostrar_Alerta("Aviso", "La fecha de la Visita 2 no corresponde al mes de la Ficha de Monitoreo que es <b>" & ViewState("NombrePeriodo") & "</b>")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()
                    boofecha = False
                ElseIf añot2c <> añop1 Then
                    alerta.Mostrar_Alerta("Aviso", "El año de la visita 2 no corresponde al Periodo")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()

                    'By Tigrito (01/07/2013): Commented 
                    'ElseIf diat2c > fsystem2 Then
                    '    alerta.Mostrar_Alerta("Aviso", "El Día Registrado es Superior al Actual")
                    '    CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    '    bloquear()
                    '    boofecha = False
                End If
            End If
            'Si la fecha 3 NO está vacia
            If txt3.Text <> "" Then
                'Comparamos Fecha 3 (Dia, Mes  y año)
                Dim fc As Date = Convert.ToDateTime(txt3.Text)
                Dim mest3c As Integer = Month(fc)
                Dim añot3c As Integer = Year(fc)
                Dim diat3c As Integer = Day(fc)
                Dim fsystem3 As Integer = Now.Day
                If mest3c <> mesp1 Then
                    alerta.Mostrar_Alerta("Aviso", "La fecha de la Visita 3 no corresponde al mes de la Ficha de Monitoreo que es <b>" & ViewState("NombrePeriodo") & "</b>")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()
                    boofecha = False
                ElseIf añot3c <> añop1 Then
                    alerta.Mostrar_Alerta("Aviso", "El año de la visita 3 no corresponde al Periodo")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()
                    boofecha = False

                    'Comentado por Tigrito
                    'ElseIf diat3c > fsystem3 Then
                    '    alerta.Mostrar_Alerta("Aviso", "El Día Registrado es Superior al Actual")
                    '    CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    '    bloquear()
                    '    boofecha = False
                End If
            End If
            'Si la fecha 4 NO está vacia
            If txt4.Text <> "" Then
                'Comparamos Fecha 4 (Dia, Mes  y año)
                Dim fd As Date = Convert.ToDateTime(txt4.Text)
                Dim mest4c As Integer = Month(fd)
                Dim añot4c As Integer = Year(fd)
                Dim diat4c As Integer = Day(fd)
                Dim fsystem4 As Integer = Now.Day
                If mest4c <> mesp1 Then
                    alerta.Mostrar_Alerta("Aviso", "La fecha de la Visita 4 no corresponde al mes de la Ficha de Monitoreo que es <b>" & ViewState("NombrePeriodo") & "</b>")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()
                ElseIf añot4c <> añop1 Then
                    alerta.Mostrar_Alerta("Aviso", "El año de la visita 4 no corresponde al Periodo")

                    'By Tigrito: Commented 29/05/2013
                    'CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))

                    bloquear()

                    'Comentado por Tigrito
                    'ElseIf diat4c > fsystem4 Then
                    '    alerta.Mostrar_Alerta("Aviso", "El Día Registrado es Superior al Actual")
                    '    CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
                    '    bloquear()
                End If
            End If
        End If
        Return boofecha
    End Function

    Public Function Quitar_Coma_Inicial(ByVal strCadena As String) As String
        Dim strRetorno As String = String.Empty
        Try
            If strCadena <> String.Empty Then
                If strCadena.Substring(0, 1) = "," Then
                    strRetorno = Quitar_Coma_Inicial(strCadena.Remove(0, 1))
                Else
                    strRetorno = strCadena
                End If
            End If
        Catch ex As Exception
            Throw ex
        End Try
        Return strRetorno
    End Function

    Public Function Obt_Ultimo_Ejecutado_Acum(ByVal strFecha1 As String, ByVal strFecha2 As String, ByVal strFecha3 As String, ByVal strFecha4 As String, ByVal strEjecutado1 As Double, ByVal strEjecutado2 As Double, ByVal strEjecutado3 As Double, ByVal strEjecutado4 As Double) As Double
        Dim dblAuxi As Double
        If strFecha4 <> "" Then
            dblAuxi = strEjecutado4
        ElseIf strFecha3 <> "" Then
            dblAuxi = strEjecutado3
        ElseIf strFecha2 <> "" Then
            dblAuxi = strEjecutado2
        ElseIf strFecha1 <> "" Then
            dblAuxi = strEjecutado1
        Else
            dblAuxi = 0
        End If
        Return dblAuxi
    End Function

    Public Function DivPorCero(ByVal Dividendo As Decimal, ByVal Divisor As Decimal) As Decimal
        Dim dblAux As Decimal

        If Divisor = 0 Then
            dblAux = 0
        Else
            dblAux = (Dividendo / Divisor)
        End If

        Return dblAux

    End Function

#End Region

    'Public Sub ListaMes()
    '    Dim objgeneralbc As GeneralBC = New GeneralBC
    '    Dim dtMes As DataTable
    '    Dim persona As String
    '    If Session("Perfil") = "AD" Then
    '        persona = ""
    '    Else
    '        persona = Session("Persona").ToString()
    '    End If
    '    dtMes = objgeneralbc.ListaMes(persona, "", Session("Año"))
    '    ddl_periodo.DataSource = dtMes
    '    ddl_periodo.DataTextField = "DESCRIPCION"
    '    ddl_periodo.DataValueField = "PERIODO"
    '    ddl_periodo.DataBind()
    '    ddl_periodo.SelectedIndex = dtMes.Rows.Count - 1

    '    'By Tigrito (21/06/2013): Seteado temporalmente de emergencia upsss 
    '    ddl_periodo.SelectedValue = "201306"
    'End Sub

    'Protected Sub ddl_periodo_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddl_periodo.SelectedIndexChanged
    '    Dim periodo As String
    '    Dim objgeneralbc As GeneralBC = New GeneralBC

    '    If ddl_periodo.SelectedValue <> "all" Then 'Sí seleccionó un periodo
    '        'Verificamos si el periodo está activo
    '        periodo = objgeneralbc.Periodo_Activo_Ficha_Monitoreo(ddl_periodo.SelectedValue) 'Periodo_Activo_Ficha_Monitoreo(..) Este método devuelve el periodo del llenado de la ficha Monitoreo

    '        If periodo = "" Then
    '            btn_guardar.Visible = False
    '        Else
    '            btn_guardar.Visible = True
    '        End If

    '        CargarGrillaMon(ViewState("VSTPOA"), ViewState("CodPeriodo"))
    '        bloquear()

    '    End If

    'End Sub

End Class